﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace KioskosJugandoLimpio.Classes
{
    public class Seccion
    {
        public string titulo;
        public int idSecciones;
        public List<Pregunta> Preguntas;
        private int p;
        public Encuesta Encuesta;
        public string NotaFinal;

        public Seccion() {
            titulo = "";
            Preguntas = new List<Pregunta>();
        }

        public Seccion(int idSecciones,Encuesta encuesta):this()
        {
            this.idSecciones = idSecciones;
            this.Encuesta = encuesta;
            DataTable t = SQL.fnDataTable(string.Format("EXEC seccionPorEncuesta {0},{1}" , idSecciones , Encuesta.idEncuestas) );
            this.titulo = t.Rows[0]["Introduccion"].ToString();
            this.NotaFinal = t.Rows[0]["NotaFinal"].ToString();
            foreach (DataRow row in t.Rows)
            {
                int idPregunta ; 
                if( int.TryParse(row["idPreguntas"].ToString(), out idPregunta) ){
                    Pregunta pregunta = new Pregunta(idPregunta, row["Pregunta"].ToString(), int.Parse(row["NumeroPregunta"].ToString()), row["ControlDefault"].ToString(), int.Parse(row["idTiposPreguntas"].ToString()), int.Parse(row["idPreguntaOculta"].ToString()), row["idOpcionActiva"].ToString(), (row["visible"].ToString().Equals("1") ? true : false), this);
                    Preguntas.Add(pregunta);
                }
            }
        }


        public Control div {
            get {
                if (this.Encuesta.mode == Modes.Edit) {
                    return divEdit;
                }
                Control div = new Control();
                div.Controls.Add(lblTitulo);
             
                foreach (Pregunta pregunta in Preguntas) {
                    div.Controls.Add(pregunta.control);
                }
                div.Controls.Add(lblNotaFinal);
                div.Controls.Add(new System.Web.UI.HtmlControls.HtmlGenericControl("HR"));
                return div;            
            }
        }

        public Label lblTitulo
        {
            get
            {
                Label l = new Label();
                l.Text = titulo;
                l.CssClass = "subtitulo";
                //l.Controls.Add(this.editButton);
                return l;
            }
        }
        public Label lblNotaFinal
        {
            get
            {
                Label l = new Label();
                l.Text = NotaFinal;
                //l.CssClass = "subtitulo";
                return l;
            }
        }

        public LinkButton editButton { get {
            LinkButton button = new LinkButton();
            button.Text = "Editar";
           // button.t
            return button;
        } }

        public Control divEdit
        {
            get
            {
                DIVformat divMain = new DIVformat("__seccion_" + idSecciones);

                DIVformat divHead = new DIVformat("__seccion_head_" + idSecciones);

                divHead.addLink("Eliminar Seccion...", string.Format("fnDelSeccion('{0}')", idSecciones));
                divHead.addNewLine();
                divHead.addLabel("Titulo de la seccion:", "pregunta");
                divHead.addNewLine();
                divHead.addTextArea(titulo.ToString(), "ST", "seccTitulo" + idSecciones, "subtitulo", "width: 100%; height: 60px;");
                divHead.addLabel("Nota final de la seccion:", "pregunta");
                divHead.addNewLine();
                divHead.addTextArea(NotaFinal.ToString(), "SN", "seccNota" + idSecciones, "subtitulo", "width: 100%; height: 60px;");

                foreach (Pregunta pregunta in Preguntas)
                {
                    divHead.addControl(pregunta.control);
                }

                divMain.addControl(divHead.getDIV());
                divMain.addNewLine();
                divMain.addLink("Agregar Pregunta ...", string.Format("addPregunta('__seccion_head_{0}');", idSecciones));
                divMain.addNewLine();
                return divMain.getDIV();
            }
        }

        public Control inputTitulo
        {
            get
            {
                TextBox l = new TextBox();
                l.Text = titulo;
                l.CssClass = "subtitulo";
                l.Attributes.Add("style", "width:100%;");
                //l.Controls.Add(this.editButton);
                return l;
            }
        }

        public Control inputNotaFinal
        {
            get
            {
                TextBox l = new TextBox();
                l.Text = NotaFinal;
                l.ID = "__notaSeccionFinal";
                l.Attributes.Add("style", "width:100%;");
                //l.CssClass = "subtitulo";
                return l;
            }
        }

        internal void guardar(System.Data.SqlClient.SqlTransaction tran)
        {
            if (this.idSecciones == -1)
            {
                this.idSecciones = SQL.fnExec(string.Format("EXEC guardarSeccion {5}, {0}, '{1}', '{2}', '{3}', '{4}'", this.Encuesta.idEncuestas, this.titulo, this.NotaFinal, 0, this.titulo, this.idSecciones), tran);
            }
            else {
                SQL.fnExec(string.Format("EXEC guardarSeccion {5},{0}, '{1}', '{2}', '{3}', '{4}'", this.Encuesta.idEncuestas, this.titulo, this.NotaFinal, 0, this.titulo,this.idSecciones), tran);
            }
            DataTable t = SQL.fnDataTable(string.Format("EXEC preguntasPorSeccion {0},{1}", this.idSecciones , this.Encuesta.idEncuestas));
            foreach (DataRow row in t.Rows)
            {
                bool deleted = true;
                foreach (Pregunta pregunta in Preguntas)
                {
                    if (pregunta.idPreguntas.ToString().Equals(row["idPreguntas"].ToString()))
                    {
                        deleted = false;
                    }
                }
                if (deleted)
                {
                    SQL.fnExec(string.Format("EXEC borrarPregunta {0}", row["idPreguntas"].ToString()), tran);
                }
            }

            int idPreguntasAnt = 0;
            foreach (Pregunta pregunta in this.Preguntas)
            {
                pregunta.guardar(tran, ref idPreguntasAnt);
            }
        }
    }
}
